#pragma once

#include <EventLoop.h>
#include <Sock.h>
#include <Channel.h>
#include <functional>
namespace muduo{
    // 用于对监听套接字进行管理
    class Acceptor{
    private:
        Socket _socket;     //用于创建监听套接字
        EventLoop* _loop;   //用于对江亭套接字进行事件监控
        Channel _channel;   //设置监听套接字的各种事件管理

        using AcceptCallback = std::function<void(int)>;
        AcceptCallback _acceptcallback; //接收到新套接字连接的回调函数
    private:
        void Handleread();          //监听套接字触发读事件之后的回调函数
        int CreateServer(int port); //创建服务器

    public:
        //启动读事件接口（需要单独设置，不能放在构造函数，因为如果立马有读事件却没有设置读事件回调会出错）
        void Listen();              
        Acceptor(EventLoop* loop,int port);
        // 设置接收到新套接字连接的回调函数
        void SetAcceptCallback(const AcceptCallback& ac);
    };
}